package com.org.javabody.Matches.MatchesDemo;

import java.util.regex.Pattern;

/**

 * 

 * @author Administrator

 *

 */
public class MatchDemo {

	public static final Long  MAX_VALUE =Long.MAX_VALUE;
    public boolean isNumber(String str) { //判断为非英文

    	if(str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    public static boolean isNumeric(String str){//正则表达式,只能是数字

    	  Pattern pattern = Pattern.compile("[0-9]*"); 
    	  return pattern.matcher(str).matches();  
    	} 
    public static boolean isNumeric1(String str){ //ascii码判断,只能是数字

    	  for(int i=str.length();--i>=0;){
    	   int chr=str.charAt(i);
    	   if(chr<48 || chr>57)
    	     return false;
    	  }
    	  return true;
    	}
    public static boolean isNumeric00(String str){ //捕获NumberFormatException异常，创建一次异常会消耗很多的系统资源

    	try{
    		Integer.parseInt(str); //转换成Int型，转换异常说明不是数字（小数点不行,可以包含正负号）

    		return true;           //缺点一耗费资源大，二是超出整型的范围也会有问题

    	}catch(NumberFormatException e){
    		return false;
    	}
    }
    public static boolean isNumeric11(String str){ //捕获NumberFormatException异常，创建一次异常会消耗很多的系统资源

    	try{
    		Long.parseLong(str); //转换成Long型，转换异常说明不是数字（小数点不行,可以包含正负号）

    		return true;           //缺点一耗费资源大，二是超出整型的范围也会有问题

    	}catch(NumberFormatException e){
    		return false;
    	}
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub


		MatchDemo demo  = new MatchDemo();
		boolean bool = demo.isNumber("1.34.4");
		System.out.println(bool);
		
		boolean bool1 = demo.isNumeric("-");
		System.out.println(bool1);
		
		boolean bool2 = demo.isNumeric1("565.4");
		System.out.println(bool2);
		
		boolean bool3 = demo.isNumeric00("-3147483648");  //-2147483648~2147483647超出这个范围就不行了

		System.out.println(bool3);
		boolean bool4 = demo.isNumeric11(String.valueOf((MAX_VALUE+2L)));  //-9223372036854774808~9223372036854774807超出这个范围就不行了

		System.out.println(bool4);

		
		System.out.println(MAX_VALUE+2L); //加减运算超出LONG的范围，会在另一边运算

	}

}
